///*
// * Copyright (c) 2014, 张涛.
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// *      http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// */
//package org.kymjs.kjframe;
//
//import android.app.Activity;
//import android.app.FragmentTransaction;
//import android.content.Intent;
//import android.os.Bundle;
//import android.os.Handler;
//import android.support.v7.app.AppCompatActivity;
//import android.view.View;
//
//import org.kymjs.kjframe.ui.AnnotateUtil;
//import org.kymjs.kjframe.ui.I_BroadcastReg;
//import org.kymjs.kjframe.ui.I_KJActivity;
//import org.kymjs.kjframe.ui.I_SkipActivity;
//import org.kymjs.kjframe.ui.KJActivityStack;
//import org.kymjs.kjframe.ui.KJFragment;
//import org.kymjs.kjframe.ui.SupportFragment;
//import org.kymjs.kjframe.utils.KJLoger;
//
//import java.lang.ref.SoftReference;
//
///**
// * @author kymjs (http://www.kymjs.com/) on 11/19/15.
// */
//public abstract class SupportActivity extends AppCompatActivity implements
//        View.OnClickListener, I_BroadcastReg, I_KJActivity, I_SkipActivity {
//
//    public static final int WHICH_MSG = 0X37210;
//
//    public Activity aty;
//
//    protected KJFragment currentKJFragment;
//    protected SupportFragment currentSupportFragment;
//    private ThreadDataCallBack callback;
//    private KJActivityHandle threadHandle = new KJActivityHandle(this);
//
//    /**
//     * Activity状态
//     */
//    public int activityState = DESTROY;
//
//    /**
//     * 一个私有回调类，线程中初始化数据完成后的回调
//     */
//    private interface ThreadDataCallBack {
//        void onSuccess();
//    }
//
//
//    private static class KJActivityHandle extends Handler {
//        private final SoftReference<SupportActivity> mOuterInstance;
//
//        KJActivityHandle(SupportActivity outer) {
//            mOuterInstance = new SoftReference<>(outer);
//        }
//
//        // 当线程中初始化的数据初始化完成后，调用回调方法
//        @Override
//        public void handleMessage(android.os.Message msg) {
//            SupportActivity aty = mOuterInstance.get();
//            if (msg.what == WHICH_MSG && aty != null) {
//                aty.callback.onSuccess();
//            }
//        }
//    }
//
//    /**
//     * 如果调用了initDataFromThread()，则当数据初始化完成后将回调该方法。
//     */
//    protected void threadDataInited() {
//    }
//
//    /**
//     * 在线程中初始化数据，注意不能在这里执行UI操作
//     */
//    @Override
//    public void initDataFromThread() {
//        callback = new ThreadDataCallBack() {
//            @Override
//            public void onSuccess() {
//                threadDataInited();
//            }
//        };
//    }
//
//    @Override
//    public void initData() {
//    }
//
//    @Override
//    public void initWidget() {
//    }
//
//    // 仅仅是为了代码整洁点
//    private void initializer() {
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                initDataFromThread();
//                threadHandle.sendEmptyMessage(WHICH_MSG);
//            }
//        }).start();
//        initData();
//        initWidget();
//    }
//
//    /**
//     * listened widget's click method
//     */
//    @Override
//    public void widgetClick(View v) {
//    }
//
//    @Override
//    public void onClick(View v) {
//        widgetClick(v);
//    }
//
//    @SuppressWarnings("unchecked")
//    protected <T extends View> T bindView(int id) {
//        return (T) findViewById(id);
//    }
//
//    @SuppressWarnings("unchecked")
//    protected <T extends View> T bindView(int id, boolean click) {
//        T view = (T) findViewById(id);
//        if (click) {
//            view.setOnClickListener(this);
//        }
//        return view;
//    }
//
//    @Override
//    public void registerBroadcast() {
//    }
//
//    @Override
//    public void unRegisterBroadcast() {
//    }
//
//
//    /***************************************************************************
//     * print Activity callback methods
//     ***************************************************************************/
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        aty = this;
//        KJActivityStack.create().addActivity(this);
//        KJLoger.state(this.getClass().getName(), "---------onCreat ");
//        super.onCreate(savedInstanceState);
//
//        setRootView(); // 必须放在annotate之前调用
//        AnnotateUtil.initBindView(this);
//        initializer();
//        registerBroadcast();
//    }
//
//    @Override
//    protected void onStart() {
//        super.onStart();
//        KJLoger.state(this.getClass().getName(), "---------onStart ");
//    }
//
//    @Override
//    protected void onResume() {
//        super.onResume();
//        activityState = RESUME;
//        KJLoger.state(this.getClass().getName(), "---------onResume ");
//    }
//
//    @Override
//    protected void onPause() {
//        super.onPause();
//        activityState = PAUSE;
//        KJLoger.state(this.getClass().getName(), "---------onPause ");
//    }
//
//    @Override
//    protected void onStop() {
//        super.onStop();
//        activityState = STOP;
//        KJLoger.state(this.getClass().getName(), "---------onStop ");
//    }
//
//    @Override
//    protected void onRestart() {
//        super.onRestart();
//        KJLoger.state(this.getClass().getName(), "---------onRestart ");
//    }
//
//    @Override
//    protected void onDestroy() {
//        unRegisterBroadcast();
//        activityState = DESTROY;
//        KJLoger.state(this.getClass().getName(), "---------onDestroy ");
//        super.onDestroy();
//        KJActivityStack.create().finishActivity(this);
//        currentKJFragment = null;
//        currentSupportFragment = null;
//        callback = null;
//        threadHandle = null;
//        aty = null;
//    }
//
//    /**
//     * skip to @param(cls)，and call @param(aty's) finish() method
//     */
//    @Override
//    public void skipActivity(Activity aty, Class<?> cls) {
//        showActivity(aty, cls);
//        aty.finish();
//    }
//
//    /**
//     * skip to @param(cls)，and call @param(aty's) finish() method
//     */
//    @Override
//    public void skipActivity(Activity aty, Intent it) {
//        showActivity(aty, it);
//        aty.finish();
//    }
//
//    /**
//     * skip to @param(cls)，and call @param(aty's) finish() method
//     */
//    @Override
//    public void skipActivity(Activity aty, Class<?> cls, Bundle extras) {
//        showActivity(aty, cls, extras);
//        aty.finish();
//    }
//
//    /**
//     * show to @param(cls)，but can't finish activity
//     */
//    @Override
//    public void showActivity(Activity aty, Class<?> cls) {
//        Intent intent = new Intent();
//        intent.setClass(aty, cls);
//        aty.startActivity(intent);
//    }
//
//    /**
//     * show to @param(cls)，but can't finish activity
//     */
//    @Override
//    public void showActivity(Activity aty, Intent it) {
//        aty.startActivity(it);
//    }
//
//    /**
//     * show to @param(cls)，but can't finish activity
//     */
//    @Override
//    public void showActivity(Activity aty, Class<?> cls, Bundle extras) {
//        Intent intent = new Intent();
//        intent.putExtras(extras);
//        intent.setClass(aty, cls);
//        aty.startActivity(intent);
//    }
//
//    /**
//     * 用Fragment替换视图
//     *
//     * @param resView        将要被替换掉的视图
//     * @param targetFragment 用来替换的Fragment
//     */
//    public void changeFragment(int resView, KJFragment targetFragment) {
//        if (targetFragment.equals(currentKJFragment)) {
//            return;
//        }
//        FragmentTransaction transaction = getFragmentManager()
//                .beginTransaction();
//        if (!targetFragment.isAdded()) {
//            transaction.add(resView, targetFragment, targetFragment.getClass()
//                    .getName());
//        }
//        if (targetFragment.isHidden()) {
//            transaction.show(targetFragment);
//            targetFragment.onChange();
//        }
//        if (currentKJFragment != null && currentKJFragment.isVisible()) {
//            transaction.hide(currentKJFragment);
//        }
//        currentKJFragment = targetFragment;
//        transaction.commit();
//    }
//
//    /**
//     * 用Fragment替换视图
//     *
//     * @param resView        将要被替换掉的视图
//     * @param targetFragment 用来替换的Fragment
//     */
//    public void changeFragment(int resView, SupportFragment targetFragment) {
//        if (targetFragment.equals(currentSupportFragment)) {
//            return;
//        }
//        android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager()
//                .beginTransaction();
//        if (!targetFragment.isAdded()) {
//            transaction.add(resView, targetFragment, targetFragment.getClass()
//                    .getName());
//        }
//        if (targetFragment.isHidden()) {
//            transaction.show(targetFragment);
//            targetFragment.onChange();
//        }
//        if (currentSupportFragment != null
//                && currentSupportFragment.isVisible()) {
//            transaction.hide(currentSupportFragment);
//        }
//        currentSupportFragment = targetFragment;
//        transaction.commit();
//    }
//}
